package com.sgy.zkclient;

import org.I0Itec.zkclient.IZkDataListener;
import org.I0Itec.zkclient.ZkClient;

public class NodeApi {

    /*
    * 借助zkclient完成会话的创建
    * */
    public static void main(String[] args) throws InterruptedException {
        /*
        * zkclient通过对zookeeperAPI内部封装，将异步创建会话过程同步化
        * */
        ZkClient zkClient = new ZkClient("192.168.201.129:2181");
        System.out.println("会话已创建...");

        // 判断节点是否存在
        String path = "/zkclient_ep";
        boolean exists = zkClient.exists("/zkclient_ep");
        if (!exists) {
            // 创建临时节点
            zkClient.createEphemeral("/zkclient_ep", "123");
        }

        // 读取节点内容
        Object o = zkClient.readData(path);
        System.out.println(o);

        // 注册监听
        zkClient.subscribeDataChanges(path, new IZkDataListener() {
            /*
            * 当节点数据内容发生变化时触发
            * s：path
            * o：变化后的节点内容
            * */
            @Override
            public void handleDataChange(String s, Object o) throws Exception {
                System.out.println(s + "该节点内容被更新，更新的内容：" + o);
            }

            /*
            * 当节点被删除时触发
            * s：path
            * */
            @Override
            public void handleDataDeleted(String s) throws Exception {
                System.out.println(s + "该节点被删除");
            }
        });

        // 更新节点内容
        zkClient.writeData(path, "123");
        Thread.sleep(1000);

        // 删除节点
        zkClient.delete(path);
        Thread.sleep(1000);
    }
}
